package NowCoder.JavaSE.String;
import java.util.*;

/**
 * HJ64 MP3光标位置
 * 中等  通过率：26.14%  时间限制：1秒  空间限制：32M
 * 知识点 数组
 * warning 校招时部分企业笔试将禁止编程题跳出页面，为提前适应，练习时请使用在线自测，而非本地IDE。
 * 描述
 * MP3 Player因为屏幕较小，显示歌曲列表的时候每屏只能显示几首歌曲，用户要通过上下键才能浏览所有的歌曲。
 * 为了简化处理，假设每屏只能显示4首歌曲，光标初始的位置为第1首歌。
 *
 * 现在要实现通过上下键控制光标移动来浏览歌曲列表，控制逻辑如下：歌曲总数<=4的时候，不需要翻页，只是挪动光标位置。
 * 光标在第一首歌曲上时，按Up键光标挪到最后一首歌曲；光标在最后一首歌曲时，按Down键光标挪到第一首歌曲。
 * 其他情况下用户按Up键，光标挪到上一首歌曲；用户按Down键，光标挪到下一首歌曲。
 *
 * 2. 歌曲总数大于4的时候（以一共有10首歌为例）：
 * 特殊翻页：屏幕显示的是第一页（即显示第1 – 4首）时，光标在第一首歌曲上，用户按Up键后，屏幕要显示最后一页（即显示第7-10首歌），
 * 同时光标放到最后一首歌上。同样的，屏幕显示最后一页时，光标在最后一首歌曲上，用户按Down键，屏幕要显示第一页，光标挪到第一首歌上。
 * 一般翻页：屏幕显示的不是第一页时，光标在当前屏幕显示的第一首歌曲时，用户按Up键后，屏幕从当前歌曲的上一首开始显示，光标也挪到上一首歌曲。
 * 光标当前屏幕的最后一首歌时的Down键处理也类似。
 * 其他情况，不用翻页，只是挪动光标就行。
 *
 * 数据范围：命令长度 1≤s≤100 ，歌曲数量 1≤n≤150
 * 进阶：时间复杂度： O(n) ，空间复杂度： O(n)
 *
 * 输入描述：
 * 输入说明：
 * 1 输入歌曲数量
 * 2 输入命令 U或者D
 *
 * 输出描述：
 * 输出说明
 * 1 输出当前列表
 * 2 输出当前选中歌曲
 *
 * 示例1
 * 输入：
 * 10
 * UUUU
 * 输出：
 * 7 8 9 10
 * 7
 * https://www.nowcoder.com/practice/eaf5b886bd6645dd9cfb5406f3753e15?tpId=37&tqId=21287&ru=/exam/oj
 */
public class MP3光标位置_HJ64 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        while(sc.hasNext()){
            int songNum = sc.nextInt();
            sc.nextLine();
            String str = sc.nextLine();
            int[] arr = turnPage(str,songNum);
            int length = arr.length;
            for(int i = 0;i < length - 1;i++){
                System.out.print(arr[i] + " ");
            }
            System.out.println(" ");
            System.out.println(arr[length - 1]);
        }
    }

    public static int[] turnPage(String str,int songNum){
        char[] strArr = str.toCharArray();
        int[] arr;
        if(songNum == 1){
            arr = new int[]{1,1};
        }
        else if(songNum == 2){
            arr = new int[]{1,2,1};
        }
        else if(songNum == 3){
            arr = new int[]{1,2,3,1};
        }else{
            arr = new int[]{1,2,3,4,1};
        }

        int cursor = 1;
        for(char i : strArr){
            if(i == 'U' && cursor == 1){
                arr = special(cursor,i,songNum,arr);
                if(songNum <= 4){
                    cursor = arr[songNum];
                }else{
                    cursor = arr[4];
                }
                continue;
            }
            if(i == 'D' && cursor == songNum){
                arr = special(cursor,i,songNum,arr);
                if(songNum <= 4){
                    cursor = arr[songNum];
                }else{
                    cursor = arr[4];
                }
                continue;
            }
            if(i == 'U'){
                arr = Ordinary(cursor,i,songNum,arr);
                if(songNum <= 4){
                    cursor = arr[songNum];
                }else{
                    cursor = arr[4];
                }
                continue;
            }
            if(i == 'D'){
                arr = Ordinary(cursor,i,songNum,arr);
                if(songNum <= 4){
                    cursor = arr[songNum];
                }else{
                    cursor = arr[4];
                }
                continue;
            }
        }
        return arr;
    }

    private static int[] special(int cursor,char ch,int songNum,int[] arr){
        if(songNum <= 4){
            //此时代表界面数组不发生改变
            //只改变光标位置
            if(ch == 'U'){
                cursor = UP(cursor,songNum);
                arr[songNum] = cursor;
                return arr;
            }
            if(ch == 'D'){
                cursor = DOWN(cursor,songNum);
                arr[songNum] = cursor;
                return arr;
            }
        }
        //走到这一步，代表界面数组需要发生改变的同时，光标也要对应移动
        //同时也代表歌曲数是大于四个的
        if(ch == 'U'){
            //因为此时是特殊翻页
            cursor = UP(cursor,songNum);
            arr = new int[]{cursor - 3, cursor - 2, cursor - 1, cursor, cursor};
            return arr;
        }
        if(ch == 'D'){
            //因为此时是特殊翻页
            cursor = DOWN(cursor,songNum);
            arr = new int[] {cursor,cursor + 1,cursor + 2,cursor + 3,cursor};
            return arr;
        }
        //实际不会走到这一步
        return null;
    }

    private static int[] Ordinary(int cursor,char ch,int songNum,int[] arr){
        if(songNum <= 4){
            //此时代表界面数组不发生改变
            //只改变光标位置
            if(ch == 'U'){
                cursor = UP(cursor,songNum);
                arr[songNum] = cursor;
                return arr;
            }
            if(ch == 'D'){
                cursor = DOWN(cursor,songNum);
                arr[songNum] = cursor;
                return arr;
            }
        }
        //走到这一步，代表界面数组需要发生改变的同时，光标也要对应移动
        //同时也代表歌曲数是大于四个的
        //因为是普通翻页
        if(ch == 'U'){
            cursor = UP(cursor,songNum);
            if(cursor < arr[0]){
                arr = new int[] {cursor,cursor + 1,cursor + 2,cursor + 3,cursor};
            }else{
                arr[4] = cursor;
            }
            return arr;
        }

        if(ch == 'D'){
            cursor = DOWN(cursor,songNum);
            if(cursor > arr[3]){
                arr = new int[] {cursor - 3,cursor - 2,cursor - 1,cursor,cursor};
            }else{
                arr[4] = cursor;
            }
            return arr;
        }
        //实际不会走到这一步
        return null;
    }

    private static int DOWN(int cursor,int songNum){
        if(cursor == songNum){
            return 1;
        }
        return cursor + 1;
    }

    private static int UP(int cursor,int songNum){
        if(cursor == 1){
            return songNum;
        }
        return cursor - 1;
    }
}
